//
//  11_盛最多水的容器.swift
//  Swift-LeetCode
//
//  Created by 卢悦明 on 2024/3/16.
/**
 https://leetcode.cn/problems/container-with-most-water/description/
 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

 返回容器可以储存的最大水量。

 说明：你不能倾斜容器。
 输入：[1,8,6,2,5,4,8,3,7]
 输出：49
 解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。
 示例 2：

 输入：height = [1,1]
 输出：1
 */

import UIKit

class ChengShui: NSObject {
    func QA() {
        print(maxArea([1,8,6,2,5,4,8,3,7])) // 49
        print(maxArea([1,1])) // 1
        print(maxArea([2,3,4,5,18,17,6]))

    }
    func maxArea(_ height: [Int]) -> Int {
        if height.count == 0 {
            return 0
        }
        var i = 0, j = height.count - 1, maxSum = 0
        while i < j {
            let area = (j - i) * min(height[i], height[j])
            maxSum = max(maxSum, area)
            if height[i] < height[j] {
                i += 1
            } else {
                j -= 1
            }
        }
        return maxSum
    }
}
